# prettier-ignore

prompts:
  - 'What is the weather like in {{city}}?'

providers:
  - id: 'openai:chat:gpt-3.5-turbo-0613'
    config:
      functions: [
        {
          "name": "get_current_weather",
          "description": "Get the current weather in a given location",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA"
              },
              "unit": {
                "type": "string",
                "enum": ["celsius", "fahrenheit"]
              }
            },
            "required": ["location"]
          }
        }
      ]

tests:
  - vars:
      city: Boston
    assert:
      - type: is-json
      - type: is-valid-openai-function-call
      - type: javascript
        value: output.name === 'get_current_weather'
      - type: javascript
        value: JSON.parse(output.arguments).location === 'Boston, MA'

  - vars:
      city: New York
    assert:
      - type: equals
        value: get_current_weather
        # Transform is a cleaner way to pick out specific properties.
        # This transform returns only the 'name' property
        transform: output.name
      - type: similar
        value: NYC
        threshold: 0.5
        # This transform returns only the parsed location argument.
        transform: JSON.parse(output.arguments).location

  - vars:
      city: Paris

  - vars:
      city: Mars
